home *** CD-ROM | disk | FTP | other *** search
/ Macwelt 1 / Macwelt DVD 1.toast / Software für Mac-OS X / Entwickler-Tools / netbeans / modules / ext / djava.jar / koala / dynamicjava / interpreter / EvaluationVisitor.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-03-14  |  27.2 KB  |  1,096 lines

  1. package koala.dynamicjava.interpreter;
  2.  
  3. import java.lang.reflect.Array;
  4. import java.lang.reflect.Constructor;
  5. import java.lang.reflect.Field;
  6. import java.lang.reflect.InvocationTargetException;
  7. import java.lang.reflect.Method;
  8. import java.util.Iterator;
  9. import java.util.List;
  10. import java.util.ListIterator;
  11. import java.util.Set;
  12. import koala.dynamicjava.interpreter.context.Context;
  13. import koala.dynamicjava.interpreter.context.GlobalContext;
  14. import koala.dynamicjava.interpreter.error.CatchedExceptionError;
  15. import koala.dynamicjava.interpreter.error.ExecutionError;
  16. import koala.dynamicjava.interpreter.modifier.LeftHandSideModifier;
  17. import koala.dynamicjava.interpreter.throwable.BreakException;
  18. import koala.dynamicjava.interpreter.throwable.ContinueException;
  19. import koala.dynamicjava.interpreter.throwable.ReturnException;
  20. import koala.dynamicjava.interpreter.throwable.ThrownException;
  21. import koala.dynamicjava.tree.AddAssignExpression;
  22. import koala.dynamicjava.tree.AddExpression;
  23. import koala.dynamicjava.tree.AndExpression;
  24. import koala.dynamicjava.tree.ArrayAccess;
  25. import koala.dynamicjava.tree.ArrayAllocation;
  26. import koala.dynamicjava.tree.ArrayInitializer;
  27. import koala.dynamicjava.tree.BitAndAssignExpression;
  28. import koala.dynamicjava.tree.BitAndExpression;
  29. import koala.dynamicjava.tree.BitOrAssignExpression;
  30. import koala.dynamicjava.tree.BitOrExpression;
  31. import koala.dynamicjava.tree.BlockStatement;
  32. import koala.dynamicjava.tree.BreakStatement;
  33. import koala.dynamicjava.tree.CastExpression;
  34. import koala.dynamicjava.tree.CatchStatement;
  35. import koala.dynamicjava.tree.ClassAllocation;
  36. import koala.dynamicjava.tree.ComplementExpression;
  37. import koala.dynamicjava.tree.ConditionalExpression;
  38. import koala.dynamicjava.tree.ContinueStatement;
  39. import koala.dynamicjava.tree.DivideAssignExpression;
  40. import koala.dynamicjava.tree.DivideExpression;
  41. import koala.dynamicjava.tree.DoStatement;
  42. import koala.dynamicjava.tree.EqualExpression;
  43. import koala.dynamicjava.tree.ExclusiveOrAssignExpression;
  44. import koala.dynamicjava.tree.ExclusiveOrExpression;
  45. import koala.dynamicjava.tree.Expression;
  46. import koala.dynamicjava.tree.ForStatement;
  47. import koala.dynamicjava.tree.FormalParameter;
  48. import koala.dynamicjava.tree.FunctionCall;
  49. import koala.dynamicjava.tree.GreaterExpression;
  50. import koala.dynamicjava.tree.GreaterOrEqualExpression;
  51. import koala.dynamicjava.tree.IfThenElseStatement;
  52. import koala.dynamicjava.tree.IfThenStatement;
  53. import koala.dynamicjava.tree.InnerAllocation;
  54. import koala.dynamicjava.tree.InstanceOfExpression;
  55. import koala.dynamicjava.tree.LabeledStatement;
  56. import koala.dynamicjava.tree.LessExpression;
  57. import koala.dynamicjava.tree.LessOrEqualExpression;
  58. import koala.dynamicjava.tree.Literal;
  59. import koala.dynamicjava.tree.MethodDeclaration;
  60. import koala.dynamicjava.tree.MinusExpression;
  61. import koala.dynamicjava.tree.MultiplyAssignExpression;
  62. import koala.dynamicjava.tree.MultiplyExpression;
  63. import koala.dynamicjava.tree.Node;
  64. import koala.dynamicjava.tree.NotEqualExpression;
  65. import koala.dynamicjava.tree.NotExpression;
  66. import koala.dynamicjava.tree.ObjectFieldAccess;
  67. import koala.dynamicjava.tree.ObjectMethodCall;
  68. import koala.dynamicjava.tree.OrExpression;
  69. import koala.dynamicjava.tree.PlusExpression;
  70. import koala.dynamicjava.tree.PostDecrement;
  71. import koala.dynamicjava.tree.PostIncrement;
  72. import koala.dynamicjava.tree.PreDecrement;
  73. import koala.dynamicjava.tree.PreIncrement;
  74. import koala.dynamicjava.tree.QualifiedName;
  75. import koala.dynamicjava.tree.RemainderAssignExpression;
  76. import koala.dynamicjava.tree.RemainderExpression;
  77. import koala.dynamicjava.tree.ReturnStatement;
  78. import koala.dynamicjava.tree.ShiftLeftAssignExpression;
  79. import koala.dynamicjava.tree.ShiftLeftExpression;
  80. import koala.dynamicjava.tree.ShiftRightAssignExpression;
  81. import koala.dynamicjava.tree.ShiftRightExpression;
  82. import koala.dynamicjava.tree.SimpleAllocation;
  83. import koala.dynamicjava.tree.SimpleAssignExpression;
  84. import koala.dynamicjava.tree.StaticFieldAccess;
  85. import koala.dynamicjava.tree.StaticMethodCall;
  86. import koala.dynamicjava.tree.SubtractAssignExpression;
  87. import koala.dynamicjava.tree.SubtractExpression;
  88. import koala.dynamicjava.tree.SuperFieldAccess;
  89. import koala.dynamicjava.tree.SuperMethodCall;
  90. import koala.dynamicjava.tree.SwitchBlock;
  91. import koala.dynamicjava.tree.SwitchStatement;
  92. import koala.dynamicjava.tree.SynchronizedStatement;
  93. import koala.dynamicjava.tree.ThrowStatement;
  94. import koala.dynamicjava.tree.TryStatement;
  95. import koala.dynamicjava.tree.TypeExpression;
  96. import koala.dynamicjava.tree.UnsignedShiftRightAssignExpression;
  97. import koala.dynamicjava.tree.UnsignedShiftRightExpression;
  98. import koala.dynamicjava.tree.VariableDeclaration;
  99. import koala.dynamicjava.tree.WhileStatement;
  100. import koala.dynamicjava.tree.visitor.VisitorObject;
  101. import koala.dynamicjava.util.Constants;
  102. import koala.dynamicjava.util.ImportationManager;
  103.  
  104. public class EvaluationVisitor extends VisitorObject {
  105.    private Context context;
  106.    // $FF: synthetic field
  107.    private static Class class$Ljava$lang$Character;
  108.  
  109.    public Object visit(WhileStatement var1) {
  110.       try {
  111.          while((Boolean)var1.getCondition().acceptVisitor(this)) {
  112.             try {
  113.                var1.getBody().acceptVisitor(this);
  114.             } catch (ContinueException var3) {
  115.                if (var3.isLabeled() && !var1.hasLabel(var3.getLabel())) {
  116.                   throw var3;
  117.                }
  118.             }
  119.          }
  120.       } catch (BreakException var4) {
  121.          if (var4.isLabeled() && !var1.hasLabel(var4.getLabel())) {
  122.             throw var4;
  123.          }
  124.       }
  125.  
  126.       return null;
  127.    }
  128.  
  129.    public Object visit(ForStatement var1) {
  130.       try {
  131.          Set var5 = (Set)var1.getProperty("variables");
  132.          this.context.enterScope(var5);
  133.          if (var1.getInitialization() != null) {
  134.             Iterator var6 = var1.getInitialization().iterator();
  135.  
  136.             while(var6.hasNext()) {
  137.                ((Node)var6.next()).acceptVisitor(this);
  138.             }
  139.          }
  140.  
  141.          try {
  142.             Expression var15 = var1.getCondition();
  143.             List var7 = var1.getUpdate();
  144.  
  145.             while(var15 == null || (Boolean)var15.acceptVisitor(this)) {
  146.                try {
  147.                   var1.getBody().acceptVisitor(this);
  148.                } catch (ContinueException var12) {
  149.                   if (var12.isLabeled() && !var1.hasLabel(var12.getLabel())) {
  150.                      throw var12;
  151.                   }
  152.                }
  153.  
  154.                if (var7 != null) {
  155.                   Iterator var8 = var7.iterator();
  156.  
  157.                   while(var8.hasNext()) {
  158.                      ((Node)var8.next()).acceptVisitor(this);
  159.                   }
  160.                }
  161.             }
  162.          } catch (BreakException var13) {
  163.             if (var13.isLabeled() && !var1.hasLabel(var13.getLabel())) {
  164.                throw var13;
  165.             }
  166.          }
  167.       } finally {
  168.          this.context.leaveScope();
  169.       }
  170.  
  171.       return null;
  172.    }
  173.  
  174.    public Object visit(DoStatement var1) {
  175.       while(true) {
  176.          try {
  177.             try {
  178.                var1.getBody().acceptVisitor(this);
  179.             } catch (ContinueException var3) {
  180.                if (var3.isLabeled() && !var1.hasLabel(var3.getLabel())) {
  181.                   throw var3;
  182.                }
  183.             }
  184.  
  185.             if ((Boolean)var1.getCondition().acceptVisitor(this)) {
  186.                continue;
  187.             }
  188.          } catch (BreakException var4) {
  189.             if (var4.isLabeled() && !var1.hasLabel(var4.getLabel())) {
  190.                throw var4;
  191.             }
  192.          }
  193.  
  194.          return null;
  195.       }
  196.    }
  197.  
  198.    public Object visit(SwitchStatement var1) {
  199.       try {
  200.          boolean var2 = false;
  201.          Object var3 = var1.getSelector().acceptVisitor(this);
  202.          if (var3 instanceof Character) {
  203.             var3 = new Integer((Character)var3);
  204.          }
  205.  
  206.          Number var4 = (Number)var3;
  207.          ListIterator var5 = var1.getBindings().listIterator();
  208.          ListIterator var6 = null;
  209.  
  210.          label65:
  211.          while(var5.hasNext()) {
  212.             SwitchBlock var7 = (SwitchBlock)var5.next();
  213.             Number var8 = null;
  214.             if (var7.getExpression() != null) {
  215.                var3 = var7.getExpression().acceptVisitor(this);
  216.                if (var3 instanceof Character) {
  217.                   var3 = new Integer((Character)var3);
  218.                }
  219.  
  220.                var8 = (Number)var3;
  221.             } else {
  222.                var6 = var1.getBindings().listIterator(var5.nextIndex() - 1);
  223.             }
  224.  
  225.             if (var8 != null && var4.intValue() == var8.intValue()) {
  226.                var2 = true;
  227.  
  228.                while(true) {
  229.                   if (var7.getStatements() != null) {
  230.                      Iterator var9 = var7.getStatements().iterator();
  231.  
  232.                      while(var9.hasNext()) {
  233.                         ((Node)var9.next()).acceptVisitor(this);
  234.                      }
  235.                   }
  236.  
  237.                   if (!var5.hasNext()) {
  238.                      break label65;
  239.                   }
  240.  
  241.                   var7 = (SwitchBlock)var5.next();
  242.                }
  243.             }
  244.          }
  245.  
  246.          if (!var2 && var6 != null) {
  247.             SwitchBlock var12 = (SwitchBlock)var6.next();
  248.  
  249.             while(true) {
  250.                if (var12.getStatements() != null) {
  251.                   Iterator var13 = var12.getStatements().iterator();
  252.  
  253.                   while(var13.hasNext()) {
  254.                      ((Node)var13.next()).acceptVisitor(this);
  255.                   }
  256.                }
  257.  
  258.                if (!var6.hasNext()) {
  259.                   break;
  260.                }
  261.  
  262.                var12 = (SwitchBlock)var6.next();
  263.             }
  264.          }
  265.       } catch (BreakException var10) {
  266.          if (var10.isLabeled()) {
  267.             throw var10;
  268.          }
  269.       }
  270.  
  271.       return null;
  272.    }
  273.  
  274.    public Object visit(LabeledStatement var1) {
  275.       try {
  276.          var1.getStatement().acceptVisitor(this);
  277.       } catch (BreakException var3) {
  278.          if (!var3.isLabeled() || !var3.getLabel().equals(var1.getLabel())) {
  279.             throw var3;
  280.          }
  281.       }
  282.  
  283.       return null;
  284.    }
  285.  
  286.    public Object visit(SynchronizedStatement var1) {
  287.       Object var2 = var1.getLock().acceptVisitor(this);
  288.       synchronized(var2) {
  289.          var1.getBody().acceptVisitor(this);
  290.          return null;
  291.       }
  292.    }
  293.  
  294.    public Object visit(BreakStatement var1) {
  295.       throw new BreakException("unexpected.break", var1.getLabel());
  296.    }
  297.  
  298.    public Object visit(ContinueStatement var1) {
  299.       throw new ContinueException("unexpected.continue", var1.getLabel());
  300.    }
  301.  
  302.    public Object visit(TryStatement var1) {
  303.       boolean var2 = false;
  304.  
  305.       try {
  306.          var1.getTryBlock().acceptVisitor(this);
  307.       } catch (Throwable var13) {
  308.          Object var7 = var13;
  309.          if (var13 instanceof ThrownException) {
  310.             var7 = ((ThrownException)var13).getException();
  311.          } else if (var13 instanceof CatchedExceptionError) {
  312.             var7 = ((CatchedExceptionError)var13).getException();
  313.          }
  314.  
  315.          for(CatchStatement var9 : var1.getCatchStatements()) {
  316.             Class var10 = NodeProperties.getType(var9.getException().getType());
  317.             if (var10.isAssignableFrom(var7.getClass())) {
  318.                var2 = true;
  319.                this.context.enterScope();
  320.                this.context.define(var9.getException().getName(), var7);
  321.                var9.getBlock().acceptVisitor(this);
  322.                break;
  323.             }
  324.          }
  325.  
  326.          if (!var2) {
  327.             if (var13 instanceof Error) {
  328.                throw (Error)var13;
  329.             }
  330.  
  331.             if (var13 instanceof RuntimeException) {
  332.                throw (RuntimeException)var13;
  333.             }
  334.  
  335.             throw new CatchedExceptionError((Exception)var13, var1);
  336.          }
  337.       } finally {
  338.          if (var2) {
  339.             this.context.leaveScope();
  340.          }
  341.  
  342.          Node var6;
  343.          if ((var6 = var1.getFinallyBlock()) != null) {
  344.             var6.acceptVisitor(this);
  345.          }
  346.  
  347.       }
  348.  
  349.       return null;
  350.    }
  351.  
  352.    public Object visit(ThrowStatement var1) {
  353.       throw new ThrownException((Throwable)var1.getExpression().acceptVisitor(this));
  354.    }
  355.  
  356.    public Object visit(ReturnStatement var1) {
  357.       if (var1.getExpression() != null) {
  358.          throw new ReturnException("return.statement", var1.getExpression().acceptVisitor(this), var1);
  359.       } else {
  360.          throw new ReturnException("return.statement", var1);
  361.       }
  362.    }
  363.  
  364.    public Object visit(IfThenStatement var1) {
  365.       if ((Boolean)var1.getCondition().acceptVisitor(this)) {
  366.          var1.getThenStatement().acceptVisitor(this);
  367.       }
  368.  
  369.       return null;
  370.    }
  371.  
  372.    public Object visit(IfThenElseStatement var1) {
  373.       if ((Boolean)var1.getCondition().acceptVisitor(this)) {
  374.          var1.getThenStatement().acceptVisitor(this);
  375.       } else {
  376.          var1.getElseStatement().acceptVisitor(this);
  377.       }
  378.  
  379.       return null;
  380.    }
  381.  
  382.    public Object visit(BlockStatement var1) {
  383.       try {
  384.          Set var5 = (Set)var1.getProperty("variables");
  385.          this.context.enterScope(var5);
  386.          Iterator var6 = var1.getStatements().iterator();
  387.  
  388.          while(var6.hasNext()) {
  389.             ((Node)var6.next()).acceptVisitor(this);
  390.          }
  391.       } finally {
  392.          this.context.leaveScope();
  393.       }
  394.  
  395.       return null;
  396.    }
  397.  
  398.    public Object visit(Literal var1) {
  399.       return var1.getValue();
  400.    }
  401.  
  402.    public Object visit(VariableDeclaration var1) {
  403.       Class var2 = NodeProperties.getType(var1.getType());
  404.       if (var1.getInitializer() != null) {
  405.          Object var3 = performCast(var2, var1.getInitializer().acceptVisitor(this));
  406.          if (var1.isFinal()) {
  407.             this.context.setConstant(var1.getName(), var3);
  408.          } else {
  409.             this.context.set(var1.getName(), var3);
  410.          }
  411.       } else if (var1.isFinal()) {
  412.          this.context.setConstant(var1.getName(), UninitializedObject.INSTANCE);
  413.       } else {
  414.          this.context.set(var1.getName(), UninitializedObject.INSTANCE);
  415.       }
  416.  
  417.       return null;
  418.    }
  419.  
  420.    public Object visit(ObjectFieldAccess var1) {
  421.       Class var2 = NodeProperties.getType(var1.getExpression());
  422.       Object var3 = var1.getExpression().acceptVisitor(this);
  423.       if (!var2.isArray()) {
  424.          Field var4 = (Field)var1.getProperty("field");
  425.  
  426.          try {
  427.             return var4.get(var3);
  428.          } catch (Exception var6) {
  429.             throw new CatchedExceptionError(var6, var1);
  430.          }
  431.       } else {
  432.          return new Integer(Array.getLength(var3));
  433.       }
  434.    }
  435.  
  436.    public Object visit(ObjectMethodCall var1) {
  437.       Expression var2 = var1.getExpression();
  438.       Object var3 = var2.acceptVisitor(this);
  439.       if (var1.hasProperty("method")) {
  440.          Method var13 = (Method)var1.getProperty("method");
  441.          Class[] var14 = var13.getParameterTypes();
  442.          List var15 = var1.getArguments();
  443.          Object[] var16 = Constants.EMPTY_OBJECT_ARRAY;
  444.          if (var15 != null) {
  445.             var16 = new Object[var15.size()];
  446.             Iterator var8 = var15.iterator();
  447.  
  448.             for(int var9 = 0; var8.hasNext(); ++var9) {
  449.                Object var10 = ((Expression)var8.next()).acceptVisitor(this);
  450.                var16[var9] = performCast(var14[var9], var10);
  451.             }
  452.          }
  453.  
  454.          try {
  455.             return var13.invoke(var3, var16);
  456.          } catch (InvocationTargetException var11) {
  457.             if (var11.getTargetException() instanceof Error) {
  458.                throw (Error)var11.getTargetException();
  459.             } else if (var11.getTargetException() instanceof RuntimeException) {
  460.                throw (RuntimeException)var11.getTargetException();
  461.             } else {
  462.                throw new ThrownException(var11.getTargetException());
  463.             }
  464.          } catch (Exception var12) {
  465.             throw new CatchedExceptionError(var12, var1);
  466.          }
  467.       } else {
  468.          Class var4 = NodeProperties.getType(var2);
  469.          int var5 = Array.getLength(var3);
  470.          Object var6 = Array.newInstance(var4.getComponentType(), var5);
  471.  
  472.          for(int var7 = 0; var7 < var5; ++var7) {
  473.             Array.set(var6, var7, Array.get(var3, var7));
  474.          }
  475.  
  476.          return var6;
  477.       }
  478.    }
  479.  
  480.    public Object visit(StaticFieldAccess var1) {
  481.       Field var2 = (Field)var1.getProperty("field");
  482.  
  483.       try {
  484.          return var2.get((Object)null);
  485.       } catch (Exception var4) {
  486.          throw new CatchedExceptionError(var4, var1);
  487.       }
  488.    }
  489.  
  490.    public Object visit(SuperFieldAccess var1) {
  491.       Field var2 = (Field)var1.getProperty("field");
  492.  
  493.       try {
  494.          return var2.get(this.context.getHiddenArgument());
  495.       } catch (Exception var4) {
  496.          throw new CatchedExceptionError(var4, var1);
  497.       }
  498.    }
  499.  
  500.    public Object visit(SuperMethodCall var1) {
  501.       Method var2 = (Method)var1.getProperty("method");
  502.       List var3 = var1.getArguments();
  503.       Object[] var4 = Constants.EMPTY_OBJECT_ARRAY;
  504.       if (var3 != null) {
  505.          Iterator var5 = var3.iterator();
  506.          int var6 = 0;
  507.  
  508.          for(var4 = new Object[var3.size()]; var5.hasNext(); ++var6) {
  509.             var4[var6] = ((Expression)var5.next()).acceptVisitor(this);
  510.          }
  511.       }
  512.  
  513.       try {
  514.          return var2.invoke(this.context.getHiddenArgument(), var4);
  515.       } catch (InvocationTargetException var7) {
  516.          if (var7.getTargetException() instanceof Error) {
  517.             throw (Error)var7.getTargetException();
  518.          } else if (var7.getTargetException() instanceof RuntimeException) {
  519.             throw (RuntimeException)var7.getTargetException();
  520.          } else {
  521.             throw new ThrownException(var7.getTargetException());
  522.          }
  523.       } catch (Exception var8) {
  524.          throw new CatchedExceptionError(var8, var1);
  525.       }
  526.    }
  527.  
  528.    public Object visit(StaticMethodCall var1) {
  529.       Method var2 = (Method)var1.getProperty("method");
  530.       List var3 = var1.getArguments();
  531.       Object[] var4 = Constants.EMPTY_OBJECT_ARRAY;
  532.       if (var3 != null) {
  533.          var4 = new Object[var3.size()];
  534.          Iterator var5 = var3.iterator();
  535.  
  536.          for(int var6 = 0; var5.hasNext(); ++var6) {
  537.             var4[var6] = ((Expression)var5.next()).acceptVisitor(this);
  538.          }
  539.       }
  540.  
  541.       try {
  542.          return var2.invoke((Object)null, var4);
  543.       } catch (InvocationTargetException var7) {
  544.          if (var7.getTargetException() instanceof Error) {
  545.             throw (Error)var7.getTargetException();
  546.          } else if (var7.getTargetException() instanceof RuntimeException) {
  547.             throw (RuntimeException)var7.getTargetException();
  548.          } else {
  549.             throw new ThrownException(var7.getTargetException());
  550.          }
  551.       } catch (Exception var8) {
  552.          throw new CatchedExceptionError(var8, var1);
  553.       }
  554.    }
  555.  
  556.    public Object visit(SimpleAssignExpression var1) {
  557.       Expression var2 = var1.getLeftExpression();
  558.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  559.       var3.prepare(this, this.context);
  560.       Object var4 = var1.getRightExpression().acceptVisitor(this);
  561.       var4 = performCast(NodeProperties.getType(var1), var4);
  562.       var3.modify(this.context, var4);
  563.       return var4;
  564.    }
  565.  
  566.    public Object visit(QualifiedName var1) {
  567.       Object var2 = this.context.get(var1.getRepresentation());
  568.       if (var2 == UninitializedObject.INSTANCE) {
  569.          var1.setProperty("errorStrings", new String[]{var1.getRepresentation()});
  570.          throw new ExecutionError("uninitialized.variable", var1);
  571.       } else {
  572.          return var2;
  573.       }
  574.    }
  575.  
  576.    public Object visit(TypeExpression var1) {
  577.       return var1.getProperty("value");
  578.    }
  579.  
  580.    public Object visit(SimpleAllocation var1) {
  581.       List var2 = var1.getArguments();
  582.       Object[] var3 = Constants.EMPTY_OBJECT_ARRAY;
  583.       if (var2 != null) {
  584.          var3 = new Object[var2.size()];
  585.          Iterator var4 = var2.iterator();
  586.  
  587.          for(int var5 = 0; var4.hasNext(); var3[var5++] = ((Expression)var4.next()).acceptVisitor(this)) {
  588.          }
  589.       }
  590.  
  591.       return this.context.invokeConstructor(var1, var3);
  592.    }
  593.  
  594.    public Object visit(ArrayAllocation var1) {
  595.       if (var1.getInitialization() != null) {
  596.          return var1.getInitialization().acceptVisitor(this);
  597.       } else {
  598.          int[] var2 = new int[var1.getSizes().size()];
  599.          Iterator var3 = var1.getSizes().iterator();
  600.  
  601.          Number var5;
  602.          for(int var4 = 0; var3.hasNext(); var2[var4++] = var5.intValue()) {
  603.             var5 = (Number)((Expression)var3.next()).acceptVisitor(this);
  604.          }
  605.  
  606.          if (var1.getDimension() != var2.length) {
  607.             Class var6 = NodeProperties.getComponentType(var1);
  608.             var6 = Array.newInstance(var6, 0).getClass();
  609.             return Array.newInstance(var6, var2);
  610.          } else {
  611.             return Array.newInstance(NodeProperties.getComponentType(var1), var2);
  612.          }
  613.       }
  614.    }
  615.  
  616.    public Object visit(ArrayInitializer var1) {
  617.       Object var2 = Array.newInstance(NodeProperties.getType(var1.getElementType()), var1.getCells().size());
  618.       Iterator var3 = var1.getCells().iterator();
  619.       int var4 = 0;
  620.  
  621.       while(var3.hasNext()) {
  622.          Object var5 = ((Expression)var3.next()).acceptVisitor(this);
  623.          Array.set(var2, var4++, var5);
  624.       }
  625.  
  626.       return var2;
  627.    }
  628.  
  629.    public Object visit(ArrayAccess var1) {
  630.       Object var2 = var1.getExpression().acceptVisitor(this);
  631.       Object var3 = var1.getCellNumber().acceptVisitor(this);
  632.       if (var3 instanceof Character) {
  633.          var3 = new Integer((Character)var3);
  634.       }
  635.  
  636.       return Array.get(var2, ((Number)var3).intValue());
  637.    }
  638.  
  639.    public Object visit(InnerAllocation var1) {
  640.       Constructor var2 = (Constructor)var1.getProperty("constructor");
  641.       Class var3 = NodeProperties.getType(var1);
  642.       List var4 = var1.getArguments();
  643.       Object var5 = null;
  644.       if (var4 != null) {
  645.          var5 = new Object[var4.size() + 1];
  646.          ((Object[])var5)[0] = var1.getExpression().acceptVisitor(this);
  647.          Iterator var6 = var4.iterator();
  648.  
  649.          for(int var7 = 1; var6.hasNext(); ((Object[])var5)[var7++] = ((Expression)var6.next()).acceptVisitor(this)) {
  650.          }
  651.       } else {
  652.          var5 = new Object[]{var1.getExpression().acceptVisitor(this)};
  653.       }
  654.  
  655.       try {
  656.          return var2.newInstance((Object[])var5);
  657.       } catch (InvocationTargetException var8) {
  658.          if (var8.getTargetException() instanceof Error) {
  659.             throw (Error)var8.getTargetException();
  660.          } else if (var8.getTargetException() instanceof RuntimeException) {
  661.             throw (RuntimeException)var8.getTargetException();
  662.          } else {
  663.             throw new ThrownException(var8.getTargetException());
  664.          }
  665.       } catch (Exception var9) {
  666.          throw new CatchedExceptionError(var9, var1);
  667.       }
  668.    }
  669.  
  670.    public Object visit(ClassAllocation var1) {
  671.       List var2 = var1.getArguments();
  672.       Object[] var3 = Constants.EMPTY_OBJECT_ARRAY;
  673.       if (var2 != null) {
  674.          var3 = new Object[var2.size()];
  675.          Iterator var4 = var2.iterator();
  676.  
  677.          for(int var5 = 0; var4.hasNext(); var3[var5++] = ((Expression)var4.next()).acceptVisitor(this)) {
  678.          }
  679.       }
  680.  
  681.       return this.context.invokeConstructor(var1, var3);
  682.    }
  683.  
  684.    public Object visit(NotExpression var1) {
  685.       if (var1.hasProperty("value")) {
  686.          return var1.getProperty("value");
  687.       } else {
  688.          Boolean var2 = (Boolean)var1.getExpression().acceptVisitor(this);
  689.          return var2 ? Boolean.FALSE : Boolean.TRUE;
  690.       }
  691.    }
  692.  
  693.    public Object visit(ComplementExpression var1) {
  694.       if (var1.hasProperty("value")) {
  695.          return var1.getProperty("value");
  696.       } else {
  697.          Class var2 = NodeProperties.getType(var1);
  698.          Object var3 = var1.getExpression().acceptVisitor(this);
  699.          if (var3 instanceof Character) {
  700.             var3 = new Integer((Character)var3);
  701.          }
  702.  
  703.          return var2 == Integer.TYPE ? new Integer(~((Number)var3).intValue()) : new Long(((Number)var3).longValue() ^ -1L);
  704.       }
  705.    }
  706.  
  707.    public Object visit(PlusExpression var1) {
  708.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.plus(NodeProperties.getType(var1), var1.getExpression().acceptVisitor(this));
  709.    }
  710.  
  711.    public Object visit(MinusExpression var1) {
  712.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.minus(NodeProperties.getType(var1), var1.getExpression().acceptVisitor(this));
  713.    }
  714.  
  715.    public Object visit(AddExpression var1) {
  716.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.add(NodeProperties.getType(var1), var1.getLeftExpression().acceptVisitor(this), var1.getRightExpression().acceptVisitor(this));
  717.    }
  718.  
  719.    public Object visit(AddAssignExpression var1) {
  720.       Expression var2 = var1.getLeftExpression();
  721.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  722.       Object var4 = var3.prepare(this, this.context);
  723.       Object var5 = InterpreterUtilities.add(NodeProperties.getType(var1), var4, var1.getRightExpression().acceptVisitor(this));
  724.       var5 = performCast(NodeProperties.getType(var2), var5);
  725.       var3.modify(this.context, var5);
  726.       return var5;
  727.    }
  728.  
  729.    public Object visit(SubtractExpression var1) {
  730.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.subtract(NodeProperties.getType(var1), var1.getLeftExpression().acceptVisitor(this), var1.getRightExpression().acceptVisitor(this));
  731.    }
  732.  
  733.    public Object visit(SubtractAssignExpression var1) {
  734.       Expression var2 = var1.getLeftExpression();
  735.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  736.       Object var4 = var3.prepare(this, this.context);
  737.       Object var5 = InterpreterUtilities.subtract(NodeProperties.getType(var1), var4, var1.getRightExpression().acceptVisitor(this));
  738.       var5 = performCast(NodeProperties.getType(var2), var5);
  739.       var3.modify(this.context, var5);
  740.       return var5;
  741.    }
  742.  
  743.    public Object visit(MultiplyExpression var1) {
  744.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.multiply(NodeProperties.getType(var1), var1.getLeftExpression().acceptVisitor(this), var1.getRightExpression().acceptVisitor(this));
  745.    }
  746.  
  747.    public Object visit(MultiplyAssignExpression var1) {
  748.       Expression var2 = var1.getLeftExpression();
  749.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  750.       Object var4 = var3.prepare(this, this.context);
  751.       Object var5 = InterpreterUtilities.multiply(NodeProperties.getType(var1), var4, var1.getRightExpression().acceptVisitor(this));
  752.       var5 = performCast(NodeProperties.getType(var2), var5);
  753.       var3.modify(this.context, var5);
  754.       return var5;
  755.    }
  756.  
  757.    public Object visit(DivideExpression var1) {
  758.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.divide(NodeProperties.getType(var1), var1.getLeftExpression().acceptVisitor(this), var1.getRightExpression().acceptVisitor(this));
  759.    }
  760.  
  761.    public Object visit(DivideAssignExpression var1) {
  762.       Expression var2 = var1.getLeftExpression();
  763.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  764.       Object var4 = var3.prepare(this, this.context);
  765.       Object var5 = InterpreterUtilities.divide(NodeProperties.getType(var1), var4, var1.getRightExpression().acceptVisitor(this));
  766.       var5 = performCast(NodeProperties.getType(var2), var5);
  767.       var3.modify(this.context, var5);
  768.       return var5;
  769.    }
  770.  
  771.    public Object visit(RemainderExpression var1) {
  772.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.remainder(NodeProperties.getType(var1), var1.getLeftExpression().acceptVisitor(this), var1.getRightExpression().acceptVisitor(this));
  773.    }
  774.  
  775.    public Object visit(RemainderAssignExpression var1) {
  776.       Expression var2 = var1.getLeftExpression();
  777.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  778.       Object var4 = var3.prepare(this, this.context);
  779.       Object var5 = InterpreterUtilities.remainder(NodeProperties.getType(var1), var4, var1.getRightExpression().acceptVisitor(this));
  780.       var5 = performCast(NodeProperties.getType(var2), var5);
  781.       var3.modify(this.context, var5);
  782.       return var5;
  783.    }
  784.  
  785.    public Object visit(EqualExpression var1) {
  786.       if (var1.hasProperty("value")) {
  787.          return var1.getProperty("value");
  788.       } else {
  789.          Expression var2 = var1.getLeftExpression();
  790.          Expression var3 = var1.getRightExpression();
  791.          return InterpreterUtilities.equalTo(NodeProperties.getType(var2), NodeProperties.getType(var3), ((Node)var2).acceptVisitor(this), ((Node)var3).acceptVisitor(this));
  792.       }
  793.    }
  794.  
  795.    public Object visit(NotEqualExpression var1) {
  796.       if (var1.hasProperty("value")) {
  797.          return var1.getProperty("value");
  798.       } else {
  799.          Expression var2 = var1.getLeftExpression();
  800.          Expression var3 = var1.getRightExpression();
  801.          return InterpreterUtilities.notEqualTo(NodeProperties.getType(var2), NodeProperties.getType(var3), ((Node)var2).acceptVisitor(this), ((Node)var3).acceptVisitor(this));
  802.       }
  803.    }
  804.  
  805.    public Object visit(LessExpression var1) {
  806.       if (var1.hasProperty("value")) {
  807.          return var1.getProperty("value");
  808.       } else {
  809.          Expression var2 = var1.getLeftExpression();
  810.          Expression var3 = var1.getRightExpression();
  811.          return InterpreterUtilities.lessThan(((Node)var2).acceptVisitor(this), ((Node)var3).acceptVisitor(this));
  812.       }
  813.    }
  814.  
  815.    public Object visit(LessOrEqualExpression var1) {
  816.       if (var1.hasProperty("value")) {
  817.          return var1.getProperty("value");
  818.       } else {
  819.          Expression var2 = var1.getLeftExpression();
  820.          Expression var3 = var1.getRightExpression();
  821.          return InterpreterUtilities.lessOrEqual(((Node)var2).acceptVisitor(this), ((Node)var3).acceptVisitor(this));
  822.       }
  823.    }
  824.  
  825.    public Object visit(GreaterExpression var1) {
  826.       if (var1.hasProperty("value")) {
  827.          return var1.getProperty("value");
  828.       } else {
  829.          Expression var2 = var1.getLeftExpression();
  830.          Expression var3 = var1.getRightExpression();
  831.          return InterpreterUtilities.greaterThan(((Node)var2).acceptVisitor(this), ((Node)var3).acceptVisitor(this));
  832.       }
  833.    }
  834.  
  835.    public Object visit(GreaterOrEqualExpression var1) {
  836.       if (var1.hasProperty("value")) {
  837.          return var1.getProperty("value");
  838.       } else {
  839.          Expression var2 = var1.getLeftExpression();
  840.          Expression var3 = var1.getRightExpression();
  841.          return InterpreterUtilities.greaterOrEqual(((Node)var2).acceptVisitor(this), ((Node)var3).acceptVisitor(this));
  842.       }
  843.    }
  844.  
  845.    public Object visit(InstanceOfExpression var1) {
  846.       Object var2 = var1.getExpression().acceptVisitor(this);
  847.       Class var3 = NodeProperties.getType(var1.getReferenceType());
  848.       return var3.isInstance(var2) ? Boolean.TRUE : Boolean.FALSE;
  849.    }
  850.  
  851.    public Object visit(ConditionalExpression var1) {
  852.       if (var1.hasProperty("value")) {
  853.          return var1.getProperty("value");
  854.       } else {
  855.          Boolean var2 = (Boolean)var1.getConditionExpression().acceptVisitor(this);
  856.          return var2 ? var1.getIfTrueExpression().acceptVisitor(this) : var1.getIfFalseExpression().acceptVisitor(this);
  857.       }
  858.    }
  859.  
  860.    public Object visit(PostIncrement var1) {
  861.       Expression var2 = var1.getExpression();
  862.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  863.       Object var4 = var3.prepare(this, this.context);
  864.       var3.modify(this.context, InterpreterUtilities.add(NodeProperties.getType(var1), var4, InterpreterUtilities.ONE));
  865.       return var4;
  866.    }
  867.  
  868.    public Object visit(PreIncrement var1) {
  869.       Expression var2 = var1.getExpression();
  870.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  871.       Object var4 = var3.prepare(this, this.context);
  872.       Object var5;
  873.       var3.modify(this.context, var5 = InterpreterUtilities.add(NodeProperties.getType(var1), var4, InterpreterUtilities.ONE));
  874.       return var5;
  875.    }
  876.  
  877.    public Object visit(PostDecrement var1) {
  878.       Expression var2 = var1.getExpression();
  879.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  880.       Object var4 = var3.prepare(this, this.context);
  881.       var3.modify(this.context, InterpreterUtilities.subtract(NodeProperties.getType(var1), var4, InterpreterUtilities.ONE));
  882.       return var4;
  883.    }
  884.  
  885.    public Object visit(PreDecrement var1) {
  886.       Expression var2 = var1.getExpression();
  887.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  888.       Object var4 = var3.prepare(this, this.context);
  889.       Object var5;
  890.       var3.modify(this.context, var5 = InterpreterUtilities.subtract(NodeProperties.getType(var1), var4, InterpreterUtilities.ONE));
  891.       return var5;
  892.    }
  893.  
  894.    public Object visit(CastExpression var1) {
  895.       return performCast(NodeProperties.getType(var1), var1.getExpression().acceptVisitor(this));
  896.    }
  897.  
  898.    public Object visit(BitAndExpression var1) {
  899.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.bitAnd(NodeProperties.getType(var1), var1.getLeftExpression().acceptVisitor(this), var1.getRightExpression().acceptVisitor(this));
  900.    }
  901.  
  902.    public Object visit(BitAndAssignExpression var1) {
  903.       Expression var2 = var1.getLeftExpression();
  904.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  905.       Object var4 = var3.prepare(this, this.context);
  906.       Object var5 = InterpreterUtilities.bitAnd(NodeProperties.getType(var1), var4, var1.getRightExpression().acceptVisitor(this));
  907.       var5 = performCast(NodeProperties.getType(var2), var5);
  908.       NodeProperties.getModifier(var2).modify(this.context, var5);
  909.       return var5;
  910.    }
  911.  
  912.    public Object visit(ExclusiveOrExpression var1) {
  913.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.xOr(NodeProperties.getType(var1), var1.getLeftExpression().acceptVisitor(this), var1.getRightExpression().acceptVisitor(this));
  914.    }
  915.  
  916.    public Object visit(ExclusiveOrAssignExpression var1) {
  917.       Expression var2 = var1.getLeftExpression();
  918.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  919.       Object var4 = var3.prepare(this, this.context);
  920.       Object var5 = InterpreterUtilities.xOr(NodeProperties.getType(var1), var4, var1.getRightExpression().acceptVisitor(this));
  921.       var5 = performCast(NodeProperties.getType(var2), var5);
  922.       var3.modify(this.context, var5);
  923.       return var5;
  924.    }
  925.  
  926.    public Object visit(BitOrExpression var1) {
  927.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.bitOr(NodeProperties.getType(var1), var1.getLeftExpression().acceptVisitor(this), var1.getRightExpression().acceptVisitor(this));
  928.    }
  929.  
  930.    public Object visit(BitOrAssignExpression var1) {
  931.       Expression var2 = var1.getLeftExpression();
  932.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  933.       Object var4 = var3.prepare(this, this.context);
  934.       Object var5 = InterpreterUtilities.bitOr(NodeProperties.getType(var1), var4, var1.getRightExpression().acceptVisitor(this));
  935.       var5 = performCast(NodeProperties.getType(var2), var5);
  936.       var3.modify(this.context, var5);
  937.       return var5;
  938.    }
  939.  
  940.    public Object visit(ShiftLeftExpression var1) {
  941.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.shiftLeft(NodeProperties.getType(var1), var1.getLeftExpression().acceptVisitor(this), var1.getRightExpression().acceptVisitor(this));
  942.    }
  943.  
  944.    public Object visit(ShiftLeftAssignExpression var1) {
  945.       Expression var2 = var1.getLeftExpression();
  946.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  947.       Object var4 = var3.prepare(this, this.context);
  948.       Object var5 = InterpreterUtilities.shiftLeft(NodeProperties.getType(var1), var4, var1.getRightExpression().acceptVisitor(this));
  949.       var5 = performCast(NodeProperties.getType(var2), var5);
  950.       var3.modify(this.context, var5);
  951.       return var5;
  952.    }
  953.  
  954.    public Object visit(ShiftRightExpression var1) {
  955.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.shiftRight(NodeProperties.getType(var1), var1.getLeftExpression().acceptVisitor(this), var1.getRightExpression().acceptVisitor(this));
  956.    }
  957.  
  958.    public Object visit(ShiftRightAssignExpression var1) {
  959.       Expression var2 = var1.getLeftExpression();
  960.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  961.       Object var4 = var3.prepare(this, this.context);
  962.       Object var5 = InterpreterUtilities.shiftRight(NodeProperties.getType(var1), var4, var1.getRightExpression().acceptVisitor(this));
  963.       var5 = performCast(NodeProperties.getType(var2), var5);
  964.       var3.modify(this.context, var5);
  965.       return var5;
  966.    }
  967.  
  968.    public Object visit(UnsignedShiftRightExpression var1) {
  969.       return var1.hasProperty("value") ? var1.getProperty("value") : InterpreterUtilities.unsignedShiftRight(NodeProperties.getType(var1), var1.getLeftExpression().acceptVisitor(this), var1.getRightExpression().acceptVisitor(this));
  970.    }
  971.  
  972.    public Object visit(UnsignedShiftRightAssignExpression var1) {
  973.       Expression var2 = var1.getLeftExpression();
  974.       LeftHandSideModifier var3 = NodeProperties.getModifier(var2);
  975.       Object var4 = var3.prepare(this, this.context);
  976.       Object var5 = InterpreterUtilities.unsignedShiftRight(NodeProperties.getType(var1), var4, var1.getRightExpression().acceptVisitor(this));
  977.       var5 = performCast(NodeProperties.getType(var2), var5);
  978.       var3.modify(this.context, var5);
  979.       return var5;
  980.    }
  981.  
  982.    public Object visit(AndExpression var1) {
  983.       Expression var2 = var1.getLeftExpression();
  984.       boolean var3 = (Boolean)var2.acceptVisitor(this);
  985.       if (var3) {
  986.          var2 = var1.getRightExpression();
  987.          var3 = (Boolean)var2.acceptVisitor(this);
  988.          return var3 ? Boolean.TRUE : Boolean.FALSE;
  989.       } else {
  990.          return Boolean.FALSE;
  991.       }
  992.    }
  993.  
  994.    public Object visit(OrExpression var1) {
  995.       Expression var2 = var1.getLeftExpression();
  996.       boolean var3 = (Boolean)var2.acceptVisitor(this);
  997.       if (!var3) {
  998.          var2 = var1.getRightExpression();
  999.          var3 = (Boolean)var2.acceptVisitor(this);
  1000.          return var3 ? Boolean.TRUE : Boolean.FALSE;
  1001.       } else {
  1002.          return Boolean.TRUE;
  1003.       }
  1004.    }
  1005.  
  1006.    public Object visit(FunctionCall var1) {
  1007.       MethodDeclaration var2 = (MethodDeclaration)var1.getProperty("function");
  1008.       GlobalContext var3 = new GlobalContext(this.context.getInterpreter());
  1009.       if (var1.getArguments() != null) {
  1010.          Iterator var4 = var2.getParameters().iterator();
  1011.          Iterator var5 = var1.getArguments().iterator();
  1012.  
  1013.          while(var4.hasNext()) {
  1014.             FormalParameter var6 = (FormalParameter)var4.next();
  1015.             if (var6.isFinal()) {
  1016.                var3.setConstant(var6.getName(), ((Node)var5.next()).acceptVisitor(this));
  1017.             } else {
  1018.                var3.setVariable(var6.getName(), ((Node)var5.next()).acceptVisitor(this));
  1019.             }
  1020.          }
  1021.       }
  1022.  
  1023.       BlockStatement var10 = var2.getBody();
  1024.       if (!((Node)var10).hasProperty("visited")) {
  1025.          ((Node)var10).setProperty("visited", (Object)null);
  1026.          ImportationManager var11 = (ImportationManager)var2.getProperty("importationManager");
  1027.          GlobalContext var12 = new GlobalContext(this.context.getInterpreter());
  1028.          var12.setImportationManager(var11);
  1029.          NameVisitor var7 = new NameVisitor(var12);
  1030.          Iterator var8 = var2.getParameters().iterator();
  1031.  
  1032.          while(var8.hasNext()) {
  1033.             ((Node)var8.next()).acceptVisitor(var7);
  1034.          }
  1035.  
  1036.          ((Node)var10).acceptVisitor(var7);
  1037.          var12 = new GlobalContext(this.context.getInterpreter());
  1038.          var12.setImportationManager(var11);
  1039.          var12.setFunctions((List)var2.getProperty("functions"));
  1040.          TypeChecker var14 = new TypeChecker(var12);
  1041.          var8 = var2.getParameters().iterator();
  1042.  
  1043.          while(var8.hasNext()) {
  1044.             ((Node)var8.next()).acceptVisitor(var14);
  1045.          }
  1046.  
  1047.          ((Node)var10).acceptVisitor(var14);
  1048.       }
  1049.  
  1050.       try {
  1051.          ((Node)var10).acceptVisitor(new EvaluationVisitor(var3));
  1052.          return null;
  1053.       } catch (ReturnException var9) {
  1054.          return var9.getValue();
  1055.       }
  1056.    }
  1057.  
  1058.    private static Object performCast(Class var0, Object var1) {
  1059.       Class var2 = var1 != null ? var1.getClass() : null;
  1060.       if (var0 != var2 && var0.isPrimitive() && var2 != null) {
  1061.          if (var0 != Character.TYPE && var2 == (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character")))) {
  1062.             var1 = new Integer((Character)var1);
  1063.          } else if (var0 == Byte.TYPE) {
  1064.             var1 = new Byte(((Number)var1).byteValue());
  1065.          } else if (var0 == Short.TYPE) {
  1066.             var1 = new Short(((Number)var1).shortValue());
  1067.          } else if (var0 == Integer.TYPE) {
  1068.             var1 = new Integer(((Number)var1).intValue());
  1069.          } else if (var0 == Long.TYPE) {
  1070.             var1 = new Long(((Number)var1).longValue());
  1071.          } else if (var0 == Float.TYPE) {
  1072.             var1 = new Float(((Number)var1).floatValue());
  1073.          } else if (var0 == Double.TYPE) {
  1074.             var1 = new Double(((Number)var1).doubleValue());
  1075.          } else if (var0 == Character.TYPE && var2 != (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character")))) {
  1076.             var1 = new Character((char)((Number)var1).shortValue());
  1077.          }
  1078.       }
  1079.  
  1080.       return var1;
  1081.    }
  1082.  
  1083.    // $FF: synthetic method
  1084.    static Class class$(String var0) {
  1085.       try {
  1086.          return Class.forName(var0);
  1087.       } catch (ClassNotFoundException var2) {
  1088.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  1089.       }
  1090.    }
  1091.  
  1092.    public EvaluationVisitor(Context var1) {
  1093.       this.context = var1;
  1094.    }
  1095. }
  1096.